#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = '汤小洋'

'''
恺撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法
采用替换的方法将信息中的每个英文字母替换为字母序列表中该字母后面的第三个字母
如，明文：abc
    密文：def
'''


# 加密，替换为后面的第三个字母
def encode():
    txt = input('请输入明文：')
    for c in txt:
        if 'a' <= c <= 'z':
            print(chr((ord(c) - ord('a') + 3) % 26 + ord('a')), end='')
        elif 'A' <= c <= 'Z':
            print(chr((ord(c) - ord('A') + 3) % 26 + ord('A')), end='')
        else:  # 非字母直接输出
            print(c, end='')


# 解密，替换为前面的第三个字母
def decode():
    txt = input('请输入密文：')
    for c in txt:
        if 'a' <= c <= 'z':
            print(chr((ord(c) - ord('a') - 3) % 26 + ord('a')), end='')
        elif 'A' <= c <= 'Z':
            print(chr((ord(c) - ord('A') - 3) % 26 + ord('A')), end='')
        else:  # 非字母直接输出
            print(c, end='')


# encode()
# decode()


'''
传统的恺撒密码：采用的是替换为后面的第三个字母，所以需要不同的加密和解密程序
改进版恺撒密码：采用的是替换为后面的第13个字母，因为一共有26个英文字母，所以既可以作为加密程序，也可以作为解密程序
'''


# 加解密
def code():
    # 1.生成密码表
    d = {}
    for c in (ord('a'), ord('A')):
        for i in range(26):
            d[chr(c + i)] = chr((i + 13) % 26 + c)
    # print(d)

    # 2.对每个字母进行替换
    txt = input('请输入明文/密文：')
    for c in txt:
        print(d.get(c, c), end='')


code()
